home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / OS / FWMenu / Include / FWMnuItm.h < prev    next >
Encoding:
Text File  |  1995-11-08  |  10.7 KB  |  358 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWMnuItm.h
  4. //    Release Version:    $ 1.0d11 $
  5. //
  6. //    Copyright:    © 1993, 1995 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWMNUITM_H
  11. #define FWMNUITM_H
  12.  
  13. #ifndef FWMENU_K
  14. #include "FWMenu.k"
  15. #endif
  16.  
  17. #ifndef FWMNUBAR_H
  18. #include "FWMnuBar.h"
  19. #endif
  20.  
  21. // ----- Foundation Includes -----
  22.  
  23. #ifndef FWSTRS_H
  24. #include "FWStrs.h"
  25. #endif
  26.  
  27. #ifndef FWSTREAM_H
  28. #include "FWStream.h"
  29. #endif
  30.  
  31. // ----- OpenDoc Includes -----
  32.  
  33. #ifndef _ODTYPES_
  34. #include <ODTypes.h>
  35. #endif
  36.  
  37. #ifndef SOM_Module_OpenDoc_Commands_defined
  38. #include <CmdDefs.xh>
  39. #endif
  40.  
  41. #if FW_LIB_EXPORT_PRAGMAS
  42. #pragma lib_export on
  43. #endif
  44.  
  45. //========================================================================================
  46. //    Forward Class Declarations
  47. //========================================================================================
  48.  
  49. class FW_CLASS_ATTR FW_CPullDownMenu;
  50. class FW_CLASS_ATTR FW_CString;
  51. class FW_CLASS_ATTR FW_CMenuBar;
  52.  
  53. //========================================================================================
  54. //    class FW_CMenuItem
  55. //========================================================================================
  56.  
  57. class FW_CLASS_ATTR FW_CMenuItem
  58. {
  59. public:
  60.     FW_DECLARE_CLASS
  61.  
  62. //----------------------------------------------------------------------------------------
  63. //    Constructors/Destructors
  64. //
  65. public:
  66. //    FW_CMenuItem();
  67.     FW_CMenuItem(Environment* ev, 
  68.                 FW_CReadableStream& archive);
  69.     FW_CMenuItem(Environment* ev, 
  70.                 FW_CPullDownMenu* ownerMenu, 
  71.                 short index);
  72.     
  73.     virtual     ~FW_CMenuItem();
  74.  
  75. //----------------------------------------------------------------------------------------
  76. //    New API
  77. //
  78. public:
  79.     //----- Getters/setters -----
  80.     virtual void        GetItemText(Environment* ev, FW_CString& itemText) const;
  81.     ODCommandID            GetCommandID(Environment* ev) const;
  82.     virtual FW_MenuKey    GetMenuKey(Environment* ev) const;
  83.     
  84.     FW_CPullDownMenu*    GetOwnerMenu(Environment* ev) const;
  85.     short                GetIndex(Environment* ev) const;
  86.  
  87.     //----- Archiving -----
  88.     virtual void        Flatten(Environment* ev, FW_CWritableStream& archive);    
  89.     static void*        Read(FW_CReadableStream& archive);
  90.     static void         Write(FW_CWritableStream& archive, const void* theMenuItem);
  91.     
  92. //----------------------------------------------------------------------------------------
  93. //    Implementation only
  94. //
  95. public:
  96.     virtual void            PrivAttach(Environment* ev, FW_CMenuBar* menuBar);
  97.     virtual void            PrivDetach(Environment* ev, FW_CMenuBar* menuBar);
  98.     virtual void            PrivDisableAll(Environment* ev);
  99.     virtual void            PrivEnableAll(Environment* ev);
  100.     virtual FW_CMenuItem*     PrivGetMenuItem(Environment* ev, ODCommandID commandID) const;
  101.     
  102.     virtual FW_CPullDownMenu* PrivFindMenuWithID(Environment* ev, ODMenuID menuID) const;
  103.     
  104.     void                    PrivSetIndex(Environment* ev, short newIndex);
  105.     
  106. //----------------------------------------------------------------------------------------
  107. //    Data Members
  108. //
  109. protected:
  110. #ifdef FW_BUILD_MAC
  111.     ODCommandID            fCommandID;        // On windows call the toolbox
  112. #endif
  113.     FW_CPullDownMenu*    fOwnerMenu;
  114.     short                fIndex;            // one-based
  115. };
  116.  
  117. //========================================================================================
  118. //    class FW_CSeparatorItem
  119. //========================================================================================
  120.  
  121. class FW_CLASS_ATTR FW_CSeparatorItem : public FW_CMenuItem
  122. {
  123. public:
  124.     FW_DECLARE_CLASS
  125.  
  126. //----------------------------------------------------------------------------------------
  127. //    Constructors/Destructors
  128. //
  129. public:
  130. //    FW_CSeparatorItem();
  131.     FW_CSeparatorItem(Environment* ev, 
  132.                 FW_CReadableStream& archive);
  133.     FW_CSeparatorItem(Environment* ev, 
  134.                 FW_CPullDownMenu* ownerMenu, 
  135.                 short index);
  136.                 
  137.     virtual     ~FW_CSeparatorItem();
  138.  
  139. protected:
  140.     void        InitSeparator(Environment* ev, const ODPlatformMenu& platformMenu);
  141.     
  142. //----------------------------------------------------------------------------------------
  143. //    Inherited API
  144. //
  145. public:
  146.     static void*        Read(FW_CReadableStream& archive);
  147.  
  148. //----------------------------------------------------------------------------------------
  149. //    Implementation only
  150. //
  151. public:
  152.     virtual void        PrivDisableAll(Environment* ev);
  153.     virtual void        PrivEnableAll(Environment* ev);
  154. };
  155.  
  156. //========================================================================================
  157. //    class FW_CTextItem
  158. //========================================================================================
  159.  
  160. class FW_CLASS_ATTR FW_CTextItem : public FW_CMenuItem
  161. {
  162. public:
  163.     FW_DECLARE_CLASS
  164.  
  165. //----------------------------------------------------------------------------------------
  166. //    Constructors/Destructors
  167. //
  168. public:
  169. //    FW_CTextItem();
  170.     FW_CTextItem(Environment* ev, 
  171.                 FW_CReadableStream& archive);
  172.     FW_CTextItem(Environment* ev,
  173.                 FW_CPullDownMenu* ownerMenu, 
  174.                 short index,            
  175.                 const FW_CString& text,
  176.                 ODCommandID commandID,
  177.                 FW_MenuKey menuKey = FW_kNoKeyEquivalent);
  178.     virtual ~FW_CTextItem();
  179.  
  180. //----------------------------------------------------------------------------------------
  181. //    Inherited API
  182. //
  183. public:
  184.     //----- Getters/setters -----
  185.     virtual void        GetItemText(Environment* ev, FW_CString& itemText) const;
  186.     virtual FW_MenuKey    GetMenuKey(Environment* ev) const;
  187.  
  188.     //----- Archiving -----
  189.     virtual void        Flatten(Environment* ev, FW_CWritableStream& archive);
  190.     static void*        Read(FW_CReadableStream& archive);
  191.  
  192. //----------------------------------------------------------------------------------------
  193. //    New API
  194. //
  195. public:
  196.     virtual void        SetItemText(Environment* ev, const FW_CString& itemText) const;
  197.     
  198. //----------------------------------------------------------------------------------------
  199. //    Implementation only
  200. //
  201. public:
  202. #ifdef FW_BUILD_MAC
  203.     virtual void        PrivAttach(Environment* ev, FW_CMenuBar* menuBar);
  204.     virtual void        PrivDetach(Environment* ev, FW_CMenuBar* menuBar);
  205. #endif
  206. private:
  207.     void                PrivInitTextItem(Environment* ev,
  208.                                          const ODPlatformMenu&    platformMenu,
  209.                                           const FW_CString& text,
  210.                                          ODCommandID commandID,
  211.                                           FW_MenuKey menuKey);
  212.                               
  213. };
  214.  
  215. //========================================================================================
  216. //    class FW_CToggleItem
  217. //========================================================================================
  218.  
  219. class FW_CLASS_ATTR FW_CToggleItem : public FW_CTextItem
  220. {
  221. public:
  222.     FW_DECLARE_CLASS
  223.  
  224. //----------------------------------------------------------------------------------------
  225. //    Constructors/Destructors
  226. //
  227. public:
  228. //    FW_CToggleItem();
  229.     FW_CToggleItem(Environment* ev, 
  230.                 FW_CReadableStream& archive);
  231.     FW_CToggleItem(Environment* ev,
  232.                 FW_CPullDownMenu* ownerMenu, 
  233.                 short index,            
  234.                 const FW_CString& trueText,
  235.                 const FW_CString& falseText,
  236.                 ODCommandID commandID,
  237.                 FW_MenuKey menuKey = FW_kNoKeyEquivalent);
  238.     virtual     ~FW_CToggleItem();
  239.  
  240. //----------------------------------------------------------------------------------------
  241. //    New API
  242. //
  243. public:
  244.     //----- Getters/setters -----
  245.     void                GetTrueText(Environment* ev, FW_CString& trueText) const;
  246.     void                GetFalseText(Environment* ev, FW_CString& falseText) const;
  247.  
  248.     void                ToggleItem(Environment* ev, FW_Boolean newState);
  249.     
  250.     //----- Archiving -----
  251.     virtual void        Flatten(Environment* ev, FW_CWritableStream& archive);
  252.     static void*        Read(FW_CReadableStream& archive);
  253.  
  254. //----------------------------------------------------------------------------------------
  255. //    Data Members
  256. //
  257. private:
  258.     FW_Boolean            fToggleState;
  259.     FW_CDynamicString    fOtherText;
  260. };
  261.  
  262. //========================================================================================
  263. //    class FW_CSubMenuItem
  264. //========================================================================================
  265.  
  266. class FW_CLASS_ATTR FW_CSubMenuItem : public FW_CMenuItem
  267. {
  268. public:
  269.     FW_DECLARE_CLASS
  270.  
  271. //----------------------------------------------------------------------------------------
  272. //    Constructors/Destructors
  273. //
  274. public:
  275. //    FW_CSubMenuItem();
  276.     FW_CSubMenuItem(Environment* ev, 
  277.                 FW_CReadableStream& archive);
  278.     FW_CSubMenuItem(Environment* ev,
  279.                 FW_CPullDownMenu* ownerMenu, 
  280.                 short index,
  281.                 FW_CPullDownMenu* adoptSubMenu);
  282.     virtual     ~FW_CSubMenuItem();
  283.  
  284. //----------------------------------------------------------------------------------------
  285. //    New API
  286. //
  287. public:
  288.     //----- Getters/setters -----
  289.     FW_CPullDownMenu*    GetSubMenu(Environment* ev) const;
  290.  
  291.     //----- Archiving -----
  292.     virtual void        Flatten(Environment* ev, FW_CWritableStream& archive);
  293.     static void*        Read(FW_CReadableStream& archive);
  294.  
  295. //----------------------------------------------------------------------------------------
  296. //    Implementation only
  297. //
  298. public:
  299.     virtual void            PrivAttach(Environment* ev, FW_CMenuBar* menuBar);
  300.     virtual void            PrivDetach(Environment* ev, FW_CMenuBar* menuBar);
  301.     virtual void            PrivDisableAll(Environment* ev);
  302.     virtual void            PrivEnableAll(Environment* ev);
  303.     virtual FW_CMenuItem*     PrivGetMenuItem(Environment* ev, ODCommandID commandID) const;
  304.  
  305.     virtual FW_CPullDownMenu* PrivFindMenuWithID(Environment* ev, ODMenuID menuID) const;
  306.  
  307. private:
  308.     void                    PrivInitSubMenu(Environment* ev, const ODPlatformMenu&    platformMenu);
  309.     
  310. //----------------------------------------------------------------------------------------
  311. //    Data Members
  312. //
  313. private:
  314.     FW_CPullDownMenu*    fSubMenu;
  315. };
  316.  
  317. //========================================================================================
  318. //    FW_CMenuItem inlines
  319. //========================================================================================
  320.  
  321. //----------------------------------------------------------------------------------------
  322. //    FW_CMenuItem::GetOwnerMenu
  323. //----------------------------------------------------------------------------------------
  324. inline FW_CPullDownMenu* FW_CMenuItem::GetOwnerMenu(Environment* ev) const
  325. {
  326.     return fOwnerMenu;
  327. }
  328.  
  329. //----------------------------------------------------------------------------------------
  330. //    FW_CMenuItem::GetIndex
  331. //----------------------------------------------------------------------------------------
  332. inline short FW_CMenuItem::GetIndex(Environment* ev) const
  333. {
  334.     return fIndex;
  335. }
  336.  
  337. //----------------------------------------------------------------------------------------
  338. //    FW_CSubMenuItem::GetSubMenu
  339. //----------------------------------------------------------------------------------------
  340. inline FW_CPullDownMenu* FW_CSubMenuItem::GetSubMenu(Environment* ev) const
  341. {
  342.     return fSubMenu;
  343. }
  344.  
  345. //----------------------------------------------------------------------------------------
  346. //    FW_CMenuItem::PrivSetIndex
  347. //----------------------------------------------------------------------------------------
  348. inline void FW_CMenuItem::PrivSetIndex(Environment* ev, short newIndex)
  349. {
  350.     fIndex = newIndex;
  351. }
  352.  
  353. #if FW_LIB_EXPORT_PRAGMAS
  354. #pragma lib_export off
  355. #endif
  356.  
  357. #endif
  358.